namespace PickGold.Charting
{
    using System;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;
    using System.Drawing.Text;

    internal interface IChartRenderingEngine
    {
        void BeginSelection(string hRef, string title);
        void DrawArc(Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle);
        void DrawCurve(Pen pen, PointF[] points, int offset, int numberOfSegments, float tension);
        void DrawEllipse(Pen pen, RectangleF rect);
        void DrawEllipse(Pen pen, float x, float y, float width, float height);
        void DrawImage(Image image, RectangleF rect);
        void DrawImage(Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr);
        void DrawImage(Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs);
        void DrawLine(Pen pen, PointF pt1, PointF pt2);
        void DrawLine(Pen pen, float x1, float y1, float x2, float y2);
        void DrawLines(Pen pen, PointF[] points);
        void DrawPath(Pen pen, GraphicsPath path);
        void DrawPie(Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle);
        void DrawPolygon(Pen pen, PointF[] points);
        void DrawRectangle(Pen pen, int x, int y, int width, int height);
        void DrawRectangle(Pen pen, float x, float y, float width, float height);
        void DrawString(string s, Font font, Brush brush, PointF point, StringFormat format);
        void DrawString(string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format);
        void EndSelection();
        void FillEllipse(Brush brush, RectangleF rect);
        void FillPath(Brush brush, GraphicsPath path);
        void FillPie(Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle);
        void FillPolygon(Brush brush, PointF[] points);
        void FillRectangle(Brush brush, RectangleF rect);
        void FillRectangle(Brush brush, float x, float y, float width, float height);
        void FillRegion(Brush brush, Region region);
        SizeF MeasureString(string text, Font font);
        SizeF MeasureString(string text, Font font, SizeF layoutArea, StringFormat stringFormat);
        void ResetClip();
        void Restore(GraphicsState gstate);
        GraphicsState Save();
        void SetClip(RectangleF rect);
        void SetClip(GraphicsPath path, CombineMode combineMode);
        void TranslateTransform(float dx, float dy);

        Region Clip { get; set; }

        System.Drawing.Graphics Graphics { get; set; }

        bool IsClipEmpty { get; }

        System.Drawing.Drawing2D.SmoothingMode SmoothingMode { get; set; }

        System.Drawing.Text.TextRenderingHint TextRenderingHint { get; set; }

        Matrix Transform { get; set; }
    }
}

